//
//  HYMainTabBar.swift
//  weibo-01
//
//  Created by 源 何 on 16/9/22.
//  Copyright © 2016年 何源. All rights reserved.
//

import UIKit

class HYMainTabBar: UITabBar {
    
    var composeClosure: (() -> ())?
    
    //外界可以通过手写代码的方式创建tabbar对象
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        //添加撰写按钮
        addSubview(composeBtn)
        
        composeBtn.addTarget(self, action: #selector(composeBtnDidClick), for: .touchUpInside)
    }
    
    //按钮的监听事件不希望外界可以访问 需要加 private 限制外界访问
    //在swift中 默认给所有继承自 NSObject 类的,实例对象的,非私有, 方法或者属性 添加@objc
    //私有的方法实际上是没有 @objc这个标记的
    //该标记是告诉系统该方法是对运行循环可见的
    //swift 2.0 版本的时候 不加@objc 不会报错 但是在运行的时候 当用户点击的时候 程序会报方法无法识别的错误
    @objc private func composeBtnDidClick() {
        //将用户的点击事件 抛给 控制器来处理
        //执行闭包
        composeClosure?()
    }
    
    //当视图从 Xib 或者 sb 中加载的时候,会执行这个方法
    //从 Xib 中加载该控件程序会崩溃
    required init?(coder aDecoder: NSCoder) {
        //默认实现报错
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutSubviews() {
        //一定要super
        super.layoutSubviews()
        
        //遍历子视图
        let btnW = self.bounds.width / 5
        let btnH = self.bounds.height
        
        //定义递增的索引
        var index = 0
        
        for subView in subviews {
            
            //修改frame
            if subView.isKind(of: NSClassFromString("UITabBarButton")!) {
                subView.frame = CGRect(x: CGFloat(index) * btnW, y: 0, width: btnW, height: btnH)
                index += (index == 1) ? 2 : 1
            }
            
            //设置撰写按钮的frame
            composeBtn.bounds.size = CGSize(width: btnW, height: btnH)
            composeBtn.center = CGPoint(x: self.center.x, y: self.bounds.size.height * 0.5)
        }
    }
    
    //通过懒加载实例化撰写微博的按钮
    private lazy var composeBtn: UIButton = {
        let btn = UIButton()
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add"), for: .normal)
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button"), for: .normal)
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button_highlighted"), for: .highlighted)
        return btn
    } ()
}
